A self-contained unit of storage in a computer system is often referred to as a "volume." Files systems administer the storage in volumes by allocating it to files and directories in response to appropriate requests. Over time, files and directories are modified in different manners. For example, directories are created and renamed. Files are created and deleted and the data in a file or in one of its attributes can be modified. Files systems reflect these changes to their base entities by modifying appropriate attributes of the entities, like creation date and size.
To track and determine what modifications have happened in a volume, traditional storage management applications have to traverse the name space of the entities in the volume verifying whether attributes of interest (like the size or the last modified date) have changed. This means that, in the absence of any additional mechanism, applications need to roam through the name space of a volume and detect changes by inspecting the appropriate attributes of a file or a directory.
There are several drawbacks to this traditional mechanism. First, when the number of entities in the volume grows, the time to visit them grows. Second the act of traversing the name space affects the contents of the in-memory caches. Given that there is no re-use of the information visited any displacement from the cache of other useful information is detrimental to the over-all performance of the system. Third, the I/O activity required to retrieve the needed attribute information is mostly random. The two main consequences are that, first, the number of disk seeks required to traverse the name space is proportional to the number of entities, thus it takes increasingly longer to do it. Second, this I/O activity has the potential effect of disturbing any other kind of I/O that is happening in the volume.
The Windows.RTM. operating system includes a mechanism that tries to address the above problem. This mechanism allows an entity to register for an event that will trigger when a change happens at a directory or at a file. This will, in effect, eliminate the need to traverse the appropriate subset of the name space. The serious drawback of this mechanism is that for each file or directory of interest, an individual event needs to be registered. This does not scale well, as the NT kernel needs to track an ever-increasing number of events to notify on.
Thus, there remains a need for a more efficient, scalable and powerful approach to tracking modifications to a storage volume in a computer system.